import NProgress from 'nprogress' // progress bar
import 'nprogress/nprogress.css' // progress bar style

NProgress.start() // 开启进度条   开始跳转的时候开启
NProgress.done() // 关闭进度条    页面跳转关闭关闭进度条

import router from '@/router'
import store from '@/store'
import getPageTitle from './utils/get-page-title'
//  to:要去哪个页面
//  from:从哪里来
//  next:它是一个函数。
//     如果直接放行 next()
//     如果要跳到其它页 next(其它页)

const whiteList = ['/login', '/404'] // 白名单列表
router.beforeEach(async(to, from, next) => {
  NProgress.start()
  // console.log(to.path, from.path)
  // console.log('to去哪里', to)
  // console.log('from去哪里', from)
  const title = getPageTitle(to.meta.title)
  document.title = title
  const token = store.state.user.token
  // console.log(token)
  // 判断是否登录,是否有token
  if (token) {
    // 有token
    if (to.path === '/login') {
      // console.log('已登录,去首页')
      next('/')
      NProgress.done()
      // next('指定了跳转的地址') 就不会经过 router.afterEach函数
      // next() 只有放行的时候会经过 router.afterEach
    } else {
      // 触发actions中的函数 获取用户信息,储存到vuex中
      // 判断一下,在获取用户信息之前,判断有没有存储过,如果存储了,就不需要发送请求
      if (!store.getters.userId) {
      // 如没有获取过用户信息就重新发送请求,获取
        await store.dispatch('user/getUserInfo')
      }
      // console.log('已经登录,放行')
      next()
    }
  } else {
    // 没有token
    if (whiteList.includes(to.path)) {
      // console.log('去白名单,放行')
      next()
    } else {
      // console.log('没有白名单,请先登录')
      next('/login')
      NProgress.done()
    }
  }
})

router.afterEach(() => {
  // console.log('页面跳转完毕会经过这里')
  NProgress.done()
})

